//
//  FYEmoticonTools.swift
//  Mircore
//
//  Created by apple on 16/8/18.
//  Copyright © 2016年 飞羽. All rights reserved.
//

import UIKit


//每页显示20个表情

let  NumberOfPage = 20

//专门负责读取表情数据的工具类
class FYEmoticonTools: NSObject {

    //单例全局访问点
    
    static  let  sharedTools: FYEmoticonTools = FYEmoticonTools()
    
    
    //构造函数私有化
    
    private  override  init() {
        
        super.init()
        
        sectionEmoticonsWidthEmoticonArray(defaultEmoticonArray)
    }
    
    //创建bundle对象
    
    private  lazy  var  emoticonBundle: NSBundle = {
    
    
        //emoticonbundle路径
        
        let   path = NSBundle.mainBundle().pathForResource("Emoticons", ofType: "bundle")!
        
        //创建emoticonBundle对象
        
        let  bundle = NSBundle(path: path)!
        
        return bundle
     
    }()
    
    
    //读取默认表情图片数据
    
    private  lazy  var  defaultEmoticonArray: [FYEmoticon] = {
    
    
    return self.loadEmoticonWithSubPath("default/info.plist")
        
     }()
    
    //读取emoji表情数据
    
    private  lazy  var  emojiEmoticonArray: [FYEmoticon] = {
    
    
        return self.loadEmoticonWithSubPath("emoji/info.plist")
    }()
    
    
    //读取浪小花表情数据
    
    private lazy  var lxhEmoticonArray: [FYEmoticon]  = {
    
    
      return  self.loadEmoticonWithSubPath("lxh/info.plist")
    }()
    
    
    //给表情视图(CollectionView)提供的数据
    
    lazy  var  allEmoticonArray: [[[FYEmoticon]]]  = {
    
    return [
        
        //默认这组数据
        
        self.sectionEmoticonsWidthEmoticonArray(self.defaultEmoticonArray),
        
        //emoji这组数据
        
        self.sectionEmoticonsWidthEmoticonArray(self.emojiEmoticonArray),
        
        //lxh这组数据
        
        self.sectionEmoticonsWidthEmoticonArray(self.lxhEmoticonArray)
        
        
        ]
     
    }()
    
    
    //根据表情数组拆分成二维数据  -> (表示每种表情分成多少页显示完)
    
    
    private  func   sectionEmoticonsWidthEmoticonArray(emoticonArray: [FYEmoticon])  -> [[FYEmoticon]]  {
    
    
    //计算每种表情分成多少页显示
        
        let  pageCount  = (emoticonArray.count  - 1) /  NumberOfPage  + 1
        
        
        var   tempArray  = [[FYEmoticon]] ()
        
        //遍历页数
        
        for page in 0..<pageCount {
            
            //从哪个索引开始截取
            
            let  loc  = page  * NumberOfPage
            
            //截取的长度
            
            var  length = NumberOfPage
            
            //表示数组不够截取
            
            if loc + length > emoticonArray.count {
                
                //当前数组的个数 - 开始的截取的索引  = 剩余个数
                
                length = emoticonArray.count  - loc
 
             }
            
            //截取范围
            
            let  range  = NSMakeRange(loc, length)
            
            //截取到子数组
            
            let  subArray = (emoticonArray  as NSArray).subarrayWithRange(range)
            
            //添加元素
            
            tempArray.append(subArray as! [FYEmoticon])
        }
        
       return tempArray
    }
    //根据表情子路径读取相应的数据
    
    private  func  loadEmoticonWithSubPath(subPath: String) -> [FYEmoticon]  {
    
    //获取info.plist文件路径
        
        let  path  = self.emoticonBundle.pathForResource(subPath, ofType: nil)!
        
        //读取指定文件的数据
        
        let  array = NSArray(contentsOfFile: path)!
        
        var tempArray = [FYEmoticon] ()
        
        //遍历数组完成字典转模型
        
        for dic in array {
            
            //字典转模型
            
            let  emoticon = FYEmoticon(dic: dic as! [String: AnyObject])
            
            
            //只有图片才需要拼接路径
            
            if  emoticon.type == "0" {
            
            //删除后面的文件名
                
                let  result = (path as NSString).stringByDeletingLastPathComponent
                
                //设置图片的全路径
                
                emoticon.path  = result  + "/"  + emoticon.png!
            
            }
            
            
            tempArray.append(emoticon)
            
        }
    
    
       return tempArray
    }
    
    
    //根据表情描述查询表情模型
    
    func  searchEmoticonWithChs(chs: String)  -> FYEmoticon?  {
    
    //扩展
        
        //$0表示闭包中的第一个参数  依次类推
        
        //如果只有一行代码还可以省略return  以上代码需要看懂
        
        if  let  defaultEmoticon  = defaultEmoticonArray.filter({ $0.chs  == chs}).first {
        
          return defaultEmoticon
        
        }
    
        if  let  lxhEmoticon  = lxhEmoticonArray.filter({ $0.chs  == chs}).first {
        
          return  lxhEmoticon
        }
        
        
        
        
        
//        let  defaultEmoticon  = defaultEmoticonArray.filter{ (emoticon) -> Bool  in
//            
//            return  emoticon.chs  == chs
//            
//            }.first
//        
//        let  lxhEmoticon  = lxhEmoticonArray.filter{  (emoticon)  -> Bool in
//            
//            
//             return emoticon.chs  == chs
//            }.first
//        
//        
//        if  defaultEmoticon  != nil {
//        
//          return defaultEmoticon
//        }
//        
//        if  lxhEmoticon  != nil  {
//        
//            return lxhEmoticon
//        }
        
        //在默认表情数组里面查找
        
//        for  value  in  defaultEmoticonArray  {
//        
//          //找到对应的表情模型
//            
//            if  value.chs == chs  {
//            
//              return value
//            }
//         }
//        
//        for  value  in  lxhEmoticonArray  {
//        
//         //找到对应的表情模型
//            
//            if  value.chs  == chs  {
//            
//            
//             return value
//            }
//            
//        }
         return nil
        
    }
    
}
